#include "Acceptor.h"

Acceptor::Acceptor(unsigned short port,const string & ip)
:_addr(port,ip)
,_sock()
{}

void Acceptor::ready(){
    setReuseAddr(true);
    setReusePort(true);
    bind();
    listen();
}
int Acceptor::accept(){
    int netfd = ::accept(_sock.fd(),nullptr,nullptr);
    if(netfd < 0){
        perror("accept");
    }
    return netfd;
}
//设置端口和ip可重用
void Acceptor::setReuseAddr(bool on){
    int value = on;
    int ret = setsockopt(_sock.fd(),SOL_SOCKET,SO_REUSEADDR,&value,sizeof(value));
    if(ret < 0){
        perror("setsockopt");
    }
}
void Acceptor::setReusePort(bool on){
    int value = on;
    int ret = setsockopt(_sock.fd(),SOL_SOCKET,SO_REUSEPORT,&value,sizeof(value));
    if(ret < 0){
        perror("setsockopt");
    }
}
void Acceptor::bind(){
    int ret = ::bind(_sock.fd(),(struct sockaddr *)&_addr,sizeof(_addr));
    if(ret < 0){
        perror("bind");
    }
}
void Acceptor::listen(){
    int ret = ::listen(_sock.fd(),1000);
}
